/**
 * Created by Administrator on 2017/5/3.
 */

var express = require('express');
var router = express.Router();

var UserToken = require('../global_var.js');
var hmCodeDao = require('../dao/hmcode.js');
var multiparty = require('multiparty');
var fs = require('fs');
var path = require("path");
var CONFIG = require('../config/config_local.js');
var hmCodeRouter = module.exports;
var picPathOnSrv = CONFIG.picsMainPath;
// var picPathOnSrv = path.join(__dirname, '../public/code');

function paramAll(req){
    var parameter = {};
    if(req.params) {
        for(var i in req.params) {
            parameter[i] = req.params[i];
        }
    }
    if(req.body){
        for(var i in req.body) {
            parameter[i] = req.body[i];
        }
    }
    if(req.query){
        for(var i in req.query) {
            parameter[i] = req.query[i];
        }
    }
    return parameter;
}

function mkdirs(dirname, mode, callback){
    fs.exists(dirname, function (exists){
        if(exists){
            callback();
        }else{
            mkdirs(path.dirname(dirname), mode, function (err){
                if(err){
                    console.log(err);
                    callback(err);
                    return;
                }
                fs.mkdir(dirname, mode, callback);
            });
        }
    });
}

/**
 * 创建活码
 * @param   token  hm_code_name  threshold
 *         url/hmcode/create
 */
hmCodeRouter.create = function (req, res) {
    var par = paramAll(req);
    if(!par.token) {
        res.json(new ERR('token 不能为空！', 400));
        return;
    }
    UserToken.checkLogin(par.token, function (err, userInfo) {
        if(err) {
            console.log(err);
            res.json(new ERR('请点击退出后，重新登录!',400));
            return;
        }
        if(!userInfo){
            res.json(new ERR('请先登录', 403));
            return ;
        }
        hmCodeDao.canCreate(userInfo, function(e, d){
           if(e) {
               res.json(new ERR(e, 400));
           }
           if(d){
               if(!par.hmName) {
                   res.json(new ERR('二维码名称不为空', 400));
                   return;
               }
               if(!par.threshold){
                   res.json(new ERR('阀值不为空！', 400));
                   return;
               }
               par.uid = userInfo.uid;
               hmCodeDao.save(par, function(err, data) {
                   if(err) {
                       res.json(new ERR('生成活码时发生错误！', 400));
                   } else {
                       res.json(new PKG(data));
                   }
               });
           }
        });
    });
}
router.post('/create', hmCodeRouter.create);


/**
 * 编辑活码    上传二维码图片
 * @param   token  hmInfo
 *         url/hmcode/hmInfoUpload
 */
hmCodeRouter.hmInfoUpload = function (req, res) {
    var form = new multiparty.Form({uploadDir: picPathOnSrv});
    form.parse(req, function (err, fields, files) {
        if(err) {
            console.log('parse error :' + err);
            res.json(new ERR('二维码上传失败',400));
            return;
        } else {
            var hmInfo = JSON.parse(fields.hmInfo);
            UserToken.checkLogin(hmInfo.token, function (err, userInfo) {
                if(err) {
                    console.log(err);
                    res.json(new ERR('请点击退出后，重新登录!',400));
                    return;
                }
                if(!userInfo){
                    res.json(new ERR('请先登录', 403));
                    return ;
                }
                hmCodeDao.canUse(userInfo, function(e, d){
                    if(e) {
                        res.json(new ERR(e, 400));
                    }
                    if(d) {
                        hmInfo.uid = userInfo.uid;
                        var hid = hmInfo.hid;
                        var relatePathName = '/pic/'+ parseInt(hmInfo.uid/10000) + '/'+ parseInt(hmInfo.uid%10000/100) + '/'+ parseInt(hmInfo.uid%100) + '/' + parseInt(hid);
                        hmInfo.picUrl = relatePathName;

                        var picFileName = path.join(picPathOnSrv, hmInfo.picUrl);
                        mkdirs(picFileName, 755 , function(e,d){});
                        form.uploadDir = path.join(picPathOnSrv, hmInfo.picUrl);
                        hmCodeDao.save(hmInfo, function(err, data) {
                            if(err) {
                                console.log(err);
                                res.json(new ERR('编辑失败！', 400));
                            } else {
                                if(files.inputFile != undefined) {
                                    uploadHmPic (hmInfo, files, res);
                                } else {
                                    res.json(new PKG('编辑成功！'));
                                }
                            }
                        });
                    }
                });
            });
        }
    });
}
router.post('/hmInfoUpload', hmCodeRouter.hmInfoUpload);


/**
 * 二维码图片上传
 * @param
 *         url/hmcode/upload
 */
function uploadHmPic (hmInfo, files, res) {
    var hid = parseInt(hmInfo.hid);
    hmCodeDao.getPicName(hmInfo.uid, hid, function(e,d){
        if(e) {
            res.json(new ERR('二维码上传失败',400));
            return;
        } else {
            var uploadedPath = files.inputFile[0].path;
            var dstPath = hmInfo.picUrl +'/'+d;
            hmInfo.picName = d;
            fs.rename(uploadedPath, path.join(picPathOnSrv, dstPath), function(err) {
                if(err) {
                    console.log(err);
                    res.json(new ERR('二维码上传失败',400));
                    return;
                } else {
                    hmCodeDao.addQrcode(hmInfo, function(e, d) {
                        if(e) {
                            res.json(new ERR('二维码上传失败',400));
                            return;
                        } else {
                            console.log(d);
                            res.json(new PKG(d));
                        }
                    })
                }
            });
        }
    });
}



/**
 * 获得某一类活码的所有二维码
 * @param  token  hid
 *         url/hmcode/getQrcodes
 */

hmCodeRouter.getQrcodes = function(req, res) {
    var par = paramAll(req);
    UserToken.checkLogin(par.token, function (err, userInfo) {
        if(err) {
            console.log(err);
            res.json(new ERR('请点击退出后，重新登录!',400));
            return;
        }
        if(!userInfo){
            res.json(new ERR('请先登录', 403));
            return ;
        }
        par.uid = userInfo.uid;
        if(!par.hid) {
            res.json(new ERR('获取活码id发生错误，请重新进入编辑页面！', 400));
            return;
        }
        hmCodeDao.getQrcodes(par, function(e, r){
            if(e) {
                res.json(new ERR('获取活码列表失败', 400));
            } else {
                res.json(new PKG(r));
            }
        });
    });
}
router.post('/getQrcodes', hmCodeRouter.getQrcodes);


/**
 * 删除某类活码
 * @param  token  hid
 *         url/hmcode/delHmCodes
 */

hmCodeRouter.delHmCodes = function(req, res) {
    var par = paramAll(req);
    UserToken.checkLogin(par.token, function (err, userInfo) {
        if(err) {
            console.log(err);
            res.json(new ERR('请点击退出后，重新登录!',400));
            return;
        }
        if(!userInfo){
            res.json(new ERR('请先登录', 403));
            return ;
        }
        par.uid = userInfo.uid;
        if(!par.hid) {
            res.json(new ERR('获取活码id发生错误，请重新进入主页面！', 400));
            return;
        }
        hmCodeDao.delHmCodes(par, function(e, r){
            if(e) {
                res.json(new ERR('删除活码失败', 400));
            } else {
                res.json(new PKG(r));
            }
        });
    });
}
router.post('/delHmCodes', hmCodeRouter.delHmCodes);

/**
 * 增加或减少已扫描次数
 * @param  token   hid  scanTimes  qrId
 *         url/hmcode/changeScanTimes
 */
hmCodeRouter.changeScanTimes = function(req, res) {
    var par = paramAll(req);
    UserToken.checkLogin(par.token, function (err, userInfo) {
        if(err) {
            console.log(err);
            res.json(new ERR('请点击退出后，重新登录!',400));
            return;
        }

        if(!userInfo){
            res.json(new ERR('请先登录', 403));
            return ;
        }

        // if(hmInfo) {
        //   par.hid  = parseInt(hmInfo.hid)
        // } else {
        //     res.json(new ERR('hid不为空！', 400));
        //     return;
        // }
        if(!par.hid){
            res.json(new ERR('阀值不为空！', 400));
            return;
        }
        if(!par.qrId){
            res.json(new ERR('qrId不为空！', 400));
            return;
        }
        if(!par.scanTimes){
            res.json(new ERR('扫描次数不为空！', 400));
            return;
        }
        par.uid = userInfo.uid;

        hmCodeDao.changeScanTimes(par, function(e, r){
            if(e) {
                res.json(new ERR('获取活码列表失败', 400));
            } else {
                res.json(new PKG(r));
            }
        });
    });
}
router.post('/changeScanTimes', hmCodeRouter.changeScanTimes);


/**
 * 删除某类活码下的某张二维码
 * @param  token  hid  qrId
 *         url/hmcode/delQrCode
 */

hmCodeRouter.delQrCode = function(req, res) {
    var par = paramAll(req);
    UserToken.checkLogin(par.token, function (err, userInfo) {
        if(err) {
            console.log(err);
            res.json(new ERR('请点击退出后，重新登录!',400));
            return;
        }
        if(!userInfo){
            res.json(new ERR('请先登录', 403));
            return ;
        }
        par.uid = userInfo.uid;
        if(!par.hid) {
            res.json(new ERR('获取活码id发生错误，请重试！', 400));
            return;
        }
        if(!par.qrId) {
            res.json(new ERR('获取二维码id发生错误，请重试！', 400));
            return;
        }
        hmCodeDao.delQrCode(par, function(e, r){
            if(e) {
                res.json(new ERR('删除二维码失败', 400));
            } else {
                res.json(new PKG(r));
            }
        });
    });
}
router.post('/delQrCode', hmCodeRouter.delQrCode);

/**
 * 获得所有类型的活码
 * @param  token
 *         url/hmcode/getHmCodes
 */

hmCodeRouter.getHmCodes = function(req, res) {
    var par = paramAll(req);
    UserToken.checkLogin(par.token, function (err, userInfo) {
        if(err) {
            console.log(err);
            res.json(new ERR('请点击退出后，重新登录!',400));
            return;
        }
        if(!userInfo){
            res.json(new ERR('请先登录', 403));
            return ;
        }
        par.uid = userInfo.uid;
        hmCodeDao.getHmCodes(par, function(e, r){
            if(e) {
                res.json(new ERR('获取活码列表失败', 400));
            } else {
                res.json(new PKG(r));
            }
        });
    });
}
router.post('/getHmCodes', hmCodeRouter.getHmCodes);


module.exports = router;